const fs = require('fs')
const path = require('path')

class MyPlugin {

    apply(compiler) {
        // 触发打包结束事件时执行
        compiler.hooks.done.tap('MyPlugin', (stats) => {
            // 获取生成的资源信息
            const assets = stats.compilation.assets
            const assetInfo = Object.entries(assets).map(entry => {
                return `${entry[0]}\t ${(entry[1].size() / 1024).toFixed(2)}KB`
            }).join('\n')

            // 获取打包所用时间
            const timeUsed = stats.endTime - stats.startTime

            // 生成要输入的字符串
            const statistics = [
                '****** 本次构建信息 ******',
                '- 构建时间：' + timeUsed + '毫秒',
                '- 资源列表：',
                assetInfo,
                '************************'
            ].join('\n')

            // 写入文件
            const distPath = compiler.options.output.path
            fs.writeFileSync(path.join(distPath, 'statistics.txt'), statistics)
        })
    }

}

module.exports = MyPlugin